isf 0.1.0

Parsing, Deserialization and Serialization of the Interactive Shader Format.
Documentation
/*
{
  "CATEGORIES" : [
    "Masking"
  ],
  "ISFVSN" : "2",
  "INPUTS" : [
    {
      "NAME" : "width",
      "TYPE" : "float",
      "DEFAULT" : 0.125
    },
    {
      "NAME" : "offset",
      "TYPE" : "point2D",
      "DEFAULT" : [
        0,
        0
      ],
      "MIN": [
      	0,
      	0
      ],
      "MAX": [
      	1,
      	1
      ]
    },
    {
      "NAME" : "alpha1",
      "TYPE" : "float",
      "MAX" : 1,
      "DEFAULT" : 0,
      "MIN" : 0
    },
    {
      "NAME" : "alpha2",
      "TYPE" : "float",
      "MAX" : 1,
      "DEFAULT" : 1,
      "MIN" : 0
    },
    {
      "NAME" : "inputImage",
      "TYPE" : "image"
    },
    {
      "NAME" : "seed1",
      "TYPE" : "float",
      "MAX" : 1,
      "DEFAULT" : 0.241,
      "MIN" : 0
    },
    {
      "NAME" : "randomThreshold",
      "TYPE" : "float",
      "MAX" : 1,
      "DEFAULT" : 0.5,
      "MIN" : 0
    }
  ],
  "CREDIT" : "by VIDVOX"
}
*/


//	glsl doesn't include random functions
//	this is a pseudo-random function
float rand(vec2 co){
    return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);
}


void main() {
	//	determine if we are on an even or odd line
	//	math goes like..
	//	mod(((coord+offset) / width),2)
	
	
	vec4 out_color = IMG_THIS_NORM_PIXEL(inputImage);
	float alphaAdjust = alpha2;
	vec2 coord = isf_FragNormCoord * RENDERSIZE;
	vec2 shift = offset * RENDERSIZE;
	float size = width * RENDERSIZE.x;
	vec2 gridIndex = vec2(0.0);

	if (size == 0.0)	{
		alphaAdjust = alpha1;
	}
	else {
		gridIndex = floor((shift + coord) / size);
		float value = rand(seed1*gridIndex);
		if (value < randomThreshold)
			alphaAdjust = alpha1;
	}
	
	out_color.a *= alphaAdjust;
	
	gl_FragColor = out_color;
}